/**
 * 格式化时间
 * @param date 要格式化的时间
 * @param fmt 格式，如'yyyy-MM-dd hh:mm:ss'
 * @flag y+ 年份
 * @flag M+ 月份
 * @flag d+ 日期
 * @flag h+ 小时
 * @flag m+ 分钟
 * @flag s+ 秒
 * @flag q+ 季度
 * @flag S 毫秒
 */
export function dateFormat(date: Date | string, fmt: string) {
  const dateObj = new Date(date)
  let result = fmt
  const o = new Map([
    ['y+', dateObj.getFullYear()],
    ['M+', dateObj.getMonth() + 1],
    ['d+', dateObj.getDate()],
    ['h+', dateObj.getHours()],
    ['m+', dateObj.getMinutes()],
    ['s+', dateObj.getSeconds()],
    ['q+', Math.floor((dateObj.getMonth() + 3) / 3)],
    ['S', dateObj.getMilliseconds()],
  ])
  for (const [k, v] of o) {
    let execResult = new RegExp(`(${k})`).exec(result)
    while (execResult) {
      const $1 = execResult[1]
      if ($1.length === 1) {
        result = result.replace($1, v.toString())
      } else {
        result = result.replace($1, v.toString().padStart($1.length, '0'))
      }
      execResult = new RegExp(`(${k})`).exec(result)
    }
  }
  return result
}
